using System;
using System.Collections.Generic;
using System.Text;

namespace IllSoft.Xvcc.Volano.Client
{
    /*public delegate void AudioAlarmEventHandler(object sender, AudioAlarmEventArgs e);

    public delegate void ChannelJoinedEventHandler(object sender, ChannelEventArgs e);

    public delegate void MessageEventHandler(object sender, MessageEventArgs e);

    public delegate void PartedEventHandler(object sender, PartEventArgs e);

    public delegate void QueryCloseReceivedEventHandler(object sender, QueryEventArgs e);

    public delegate void QueryCloseSentEventHandler(object sender, QueryEventArgs e);

    public delegate void QueryRequestReceivedEventHandler(object sender, QueryEventArgs e);

    public delegate void QueryRequestSentEventHandler(object sender, QueryEventArgs e);

    public delegate void QueryRequestSentAcceptedEventHandler(object sender, QueryEventArgs e);*/

    public interface IVolanoClient
    {
        event EventHandler Authenticated;

        event EventHandler Authenticating;

        event EventHandler<ChannelListEventArgs> ChannelListReceived;

        event EventHandler Connected;

        event EventHandler Connecting;

        event EventHandler Disconnected;

        event EventHandler Disconnecting;

        event EventHandler<MessageEventArgs> Message;

        event EventHandler PacketReceived;

        event EventHandler PacketReceiving;

        event EventHandler PingReceived;

        event EventHandler PongSending;

        event EventHandler PongSent;

        event EventHandler UnknownPacketReceived;

        event EventHandler<UserListEventArgs> UserListReceived;

        Channels Channels { get; }

        Queries Queries { get; }

        ConnectionArgs ConnectionArgs { get; }

        void Connect(ConnectionArgs connectionArgs);

        Channel CreateChannel(string text, User myself);

        Query CreateQuery(string text, User myself);

        void Disconnect();

        void ProcessAudioAlarm();

        void ProcessAuthentication();

        void ProcessChannelJoin();

        void ProcessChannelList();

        void ProcessChannelPart();

        void ProcessMessage();

        void ProcessPing();

        void ProcessQueryClose();

        void ProcessQueryRequest();

        void ProcessUnknownPacket();

        void ProcessUserList();

        void Reconnect();

        void SendAudioAlarm(Channel channel, User myself, User otherUser);

        void SendAuthentication();

        void SendChannelJoin(Channel channel, User myself);

        void SendChannelPart(Channel channel, User myself);

        void SendGetUserList(string channelName);

        void SendMessage(Channel channel, User myself, string message);

        void SendMessage(Query query, User myself, string message);

        void SendPong();

        void SendQueryClose(User myself, User otherUser);

        void SendQueryRequest(Channel channel, User myself, User otherUser);
    }
}